package com.blog.cmrpersonalblog.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.blog.cmrpersonalblog.common.Result;
import com.blog.cmrpersonalblog.dto.homepage.HomePageQueryRequest;
import com.blog.cmrpersonalblog.dto.homepage.HomePageResponse;
import com.blog.cmrpersonalblog.service.HomePageService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户端首页控制器
 * 提供首页数据展示功能，包括分类列表、文章列表、榜单数据等
 */
@Slf4j
@RestController
@RequestMapping("/api/home")
@CrossOrigin(origins = "*", maxAge = 3600)
@Validated
public class HomePageController {

   @Resource
    private HomePageService homePageService;

    /**
     * 获取分类列表（左侧导航）
     * 无需分页，返回所有启用的分类
     */
    @GetMapping("/categories")
    public Result<List<HomePageResponse.CategoryInfo>> getCategories() {
        log.info("获取分类列表");
        try {
            List<HomePageResponse.CategoryInfo> categories = homePageService.getCategories();
            return Result.success("获取分类列表成功", categories);
        } catch (Exception e) {
            log.error("获取分类列表失败", e);
            return Result.error("获取分类列表失败：" + e.getMessage());
        }
    }

    /**
     * 获取文章列表（中间内容）
     * 支持分页、排序、筛选
     *
     * @param queryRequest 查询参数，包含分页信息
     * @return 分页的文章列表数据
     */
    @GetMapping("/articles")
    public Result<HomePageResponse.ArticleListData> getArticles(@Validated HomePageQueryRequest queryRequest) {
        log.info("获取文章列表: {}", queryRequest);
        try {
            // 设置默认分页参数
            if (queryRequest.getCurrent() == null || queryRequest.getCurrent() < 1) {
                queryRequest.setCurrent(1L);
            }
            if (queryRequest.getSize() == null || queryRequest.getSize() < 1) {
                queryRequest.setSize(10L);
            }

            // 获取当前用户ID（如果已登录）
            Long currentUserId = null;
            try {
                if (StpUtil.isLogin()) {
                    currentUserId = StpUtil.getLoginIdAsLong();
                }
            } catch (Exception e) {
                // 未登录状态，继续执行
                log.debug("用户未登录，以游客身份获取文章列表");
            }

            HomePageResponse.ArticleListData articles = homePageService.getArticles(queryRequest, currentUserId);
            return Result.success("获取文章列表成功", articles);
        } catch (Exception e) {
            log.error("获取文章列表失败", e);
            return Result.error("获取文章列表失败：" + e.getMessage());
        }
    }


}
